package com.dlc.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dlc.shop.bean.dto.CategoryShopDTO;
import com.dlc.shop.bean.model.Category;
import com.dlc.shop.bean.model.CategoryShop;
import com.dlc.shop.bean.vo.CategoryShopVO;
import com.dlc.shop.common.util.PageParam;

import java.util.List;

/**
 * @Author lth
 * @Date 2021/7/28 10:25
 */
public interface CategoryShopService extends IService<CategoryShop> {

    /**
     * 签约分类
     * @param categoryShopList 签约的分类信息列表
     * @param shopId 签约的店铺id
     * @param isPlatform 是否是平台端操作
     */
    void signingCategory(List<CategoryShop> categoryShopList, Long shopId, Boolean isPlatform);

    /**
     * 根据店铺id批量保存分类签约信息
     * @param categoryShopList
     * @param shopId
     * @param status
     * @return
     */
    void insertBatchByShopId(List<CategoryShop> categoryShopList, Long shopId, Integer status);

    /**
     * 根据店铺id获取签约的分类列表和分类语言信息(分类和语言列表，如果只需要分类名称，建议使用 listSigningCategoryAndLang） 【缓存】
     * @param shopId
     * @return
     */
    List<CategoryShopVO> listSigningCategoryAndLang(Long shopId);

    /**
     * 根据店铺id获取签约的分类列表(返回所有）
     * @param shopId
     * @return
     */
    List<CategoryShopVO> listSigningCategoryByShopId(Long shopId);

    /**
     * 获取店铺签约的可用分类列表和分类语言信息(发布商品时使用,分类信息和语言列表，如果子需要分类名称，建议用 listAvailableSigningCategoryLang）
     * @param shopId
     * @return
     */
    List<Category> listAvailableSigningCategoryLang(Long shopId);

    /**
     * 获取店铺签约的可用分类列表(发布商品时使用）
     * @param shopId
     * @return
     */
    List<Category> listAvailableSigningCategory(Long shopId);

    /**
     * 根据店铺id获取平台佣金
     * @param shopId 店铺id
     * @return 平台佣金
     */
    List<Category> listRateByShopId(Long shopId);

    /**
     * 根据分类id删除店铺分类关联关系
     * @param categoryId
     */
    void deleteByCategoryId(Long categoryId);

    /**
     * 根据存在变化的分类的id列表清除缓存
     * @param categoryIds
     */
    void removeCacheByChangeCategoryIds(List<Long> categoryIds);

    /**
     * 根据店铺id与状态更改签约状态
     * @param shopId
     * @param oldStatus
     * @param newStatus
     */
    void changeStatusByShopIdAndStatus(Long shopId, Integer oldStatus, Integer newStatus);

    /**
     * 根据店铺ids清除缓存
     * @param shopIds
     */
    void removeCacheByShopIds(List<Long> shopIds);

    /**
     * 分页获取分类签约信息
     * @param page
     * @param categoryShop
     * @return
     */
    IPage<CategoryShopVO> pageSigningInfo(PageParam<CategoryShopVO> page, CategoryShopDTO categoryShop);

    /**
     * 根据店铺id与分类id删除签约分类
     * @param shopId
     * @param categoryId
     */
    void delete(Long shopId, Long categoryId);

    /**
     * 根据店铺id与分类id更新自定义扣率
     * @param shopId
     * @param categoryId
     * @param rate
     */
    void updateRate(Long shopId, Long categoryId, Double rate);

    /**
     * 获取店铺签约的分类和签约分类的上级分类
     * @param shopId
     * @return
     */
    List<Category> listSigningCategoryAndParent(Long shopId);
}
